home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / runner1a / shortcre.bas < prev    next >
BASIC Source File  |  1999-09-14  |  12KB  |  335 lines

  1. Attribute VB_Name = "ShrtCut"
  2. Private Const kQuote = """"
  3. Private Const kEmptyString = ""
  4. Private Const kMaxPathLength = 260 ' Maximum allowed path & filename length.
  5. Private Const kMaxGroupNameLength = 30 ' NT Maximum length that we allow for an group name.
  6. Private Const kInvalid95GroupNameChars = "\/:*?""<>|" ' Invalid Windows 95 Group Name Characters.
  7. Private Const kInvalidNTGroupNameChars = """][,)(" ' Invalid Windows NT Group Name Characters.
  8. Private Const kDesktopGroup = "..\..\DESKTOP" ' Desktop Group.
  9. Private Const kStartMenuGroup = ".." ' Start Menu Group.
  10. '     'PROGRAM MANAGER ACTIONS'
  11. Const kDDE_AddItem = 1 'AddProgManItem flag
  12. Const kDDE_AddGroup = 2 'AddProgManGroup flag
  13. '     'Other functions'
  14. Declare Function GetWinPlatform Lib "VB5STKIT.DLL" () As Long
  15.  
  16. Declare Function fNTWithShell Lib "VB5STKIT.DLL" () As Boolean
  17.  
  18. Private Declare Function OSGetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
  19.  
  20. Declare Function OSfCreateShellGroup Lib "VB5STKIT.DLL" Alias "fCreateShellFolder" (ByVal lpstrDirName As String) As Long
  21.  
  22. Declare Function OSfCreateShellLink Lib "VB5STKIT.DLL" Alias "fCreateShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String) As Long
  23.  
  24. Declare Function OSfRemoveShellLink Lib "VB5STKIT.DLL" Alias "fRemoveShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String) As Long
  25. Public Sub CreateShortcut(ByRef frm As Form, ByVal strGroupName As String, ByVal strLinkName As String, ByVal strLinkPath As String, ByVal strLinkArguments As String)
  26.               If fCreateProgGroup(frm, strGroupName) Then
  27.  
  28.                             If TreatAsWin95() Then
  29.                                    
  30.                                    CreateShellLink strLinkPath, strGroupName, strLinkArguments, strLinkName
  31.                             Else
  32.                                    
  33.                                    strLinkPath = GetShortPathName(strUnQuoteString(strLinkPath))
  34.                                    CreateProgManItem frm, strGroupName, strLinkPath & " " & strLinkArguments, strLinkName
  35.                             End If
  36.  
  37.               End If
  38.  
  39. End Sub
  40.  
  41.  
  42. Private Sub CreateShellLink(ByVal strLinkPath As String, ByVal strGroupName As String, ByVal strLinkArguments As String, ByVal strLinkName As String)
  43.        strLinkName = strUnQuoteString(strLinkName)
  44.        strLinkPath = strUnQuoteString(strLinkPath)
  45.        Dim fSuccess As Boolean
  46.        fSuccess = OSfCreateShellLink(strGroupName & "", strLinkName, strLinkPath, strLinkArguments & "")
  47.  
  48.               If Not fSuccess Then
  49.                      MsgBox "Create Shortcut Failed!", vbExclamation, "Ouch!"
  50.               End If
  51.  
  52. End Sub
  53.  
  54.  
  55. Private Sub CreateProgManItem(frm As Form, ByVal strGroupName As String, ByVal strCmdLine As String, ByVal strIconTitle As String)
  56.  
  57.        PerformDDE frm, strGroupName, strCmdLine, strIconTitle, kDDE_AddItem
  58. End Sub
  59.  
  60.  
  61. Private Sub PerformDDE(frm As Form, ByVal strGroup As String, ByVal strCmd As String, ByVal strTitle As String, ByVal intDDE As Integer)
  62.  
  63.        Const strCOMMA$ = ","
  64.        Const strRESTORE$ = ", 1)]"
  65.        Const strACTIVATE$ = ", 5)]"
  66.        Const strENDCMD$ = ")]"
  67.        Const strSHOWGRP$ = "[ShowGroup("
  68.        Const strADDGRP$ = "[CreateGroup("
  69.        Const strREPLITEM$ = "[ReplaceItem("
  70.        Const strADDITEM$ = "[AddItem("
  71.        Dim intIdx As Integer
  72.        Screen.MousePointer = vbHourglass
  73.        Dim intRetry As Integer
  74.  
  75.               For intRetry = 1 To 20
  76.                      On Error Resume Next
  77.                      frm.lblDDE.LinkTopic = "PROGMAN|PROGMAN"
  78.  
  79.                             If Err = 0 Then
  80.                                    Exit For
  81.                             End If
  82.  
  83.  
  84.                             DoEvents
  85.                             Next intRetry
  86.  
  87.                      frm.lblDDE.LinkMode = 2
  88.  
  89.                             For intIdx = 1 To 10
  90.                                     DoEvents
  91.                             Next
  92.  
  93.                      frm.lblDDE.LinkTimeout = 100
  94.                      On Error Resume Next
  95.  
  96.                             If Err = 0 Then
  97.                                    Select Case intDDE
  98.                                    Case kDDE_AddItem
  99.  
  100.                                           #If 0 Then
  101.                                                  frm.lblDDE.LinkExecute strSHOWGRP & strGroup & strACTIVATE
  102.                                           #Else
  103.                                                  frm.lblDDE.LinkExecute strADDGRP & strGroup & strENDCMD
  104.                                           #End If
  105.  
  106.                                    frm.lblDDE.LinkExecute strREPLITEM & strTitle & strENDCMD
  107.                                    Err = 0
  108.                                    frm.lblDDE.LinkExecute strADDITEM & strCmd & strCOMMA & strTitle & String$(3, strCOMMA) & strENDCMD
  109.                                    Case kDDE_AddGroup
  110.                                    frm.lblDDE.LinkExecute strADDGRP & strGroup & strENDCMD
  111.                                    frm.lblDDE.LinkExecute strSHOWGRP & strGroup & strRESTORE
  112.                                    
  113.                             End Select
  114.  
  115.               End If
  116.  
  117.        frm.lblDDE.LinkMode = 0
  118.        frm.lblDDE.LinkTopic = ""
  119.        Screen.MousePointer = vbDefault
  120.        Err = 0
  121. End Sub
  122. Private Function fCreateProgGroup(frm As Form, sNewGroupName As String) As Boolean
  123.  
  124.               If UCase(Trim(sNewGroupName)) = kDesktopGroup Or sNewGroupName = kStartMenuGroup Then
  125.                      fCreateProgGroup = True
  126.                      Exit Function
  127.               Else
  128.  
  129.                             If TreatAsWin95() Then
  130.                                 
  131.  
  132.                                           If Not fValid95Filename(sNewGroupName) Then
  133.                                                  MsgBox "Error: Could not validate the Program Group name!", vbQuestion, "Error"
  134.                                                  GoTo CGError
  135.                                           End If
  136.  
  137.                             Else
  138.                                   
  139.  
  140.                                           If Not fValidNTGroupName(sNewGroupName) Then
  141.                                                  MsgBox "Error: Could not validate the Program Group name!", vbQuestion, "Error"
  142.                                                  GoTo CGError
  143.                                           End If
  144.  
  145.                             End If
  146.  
  147.                             If Not fCreateOSProgramGroup(frm, sNewGroupName) Then
  148.                                    GoTo CGError
  149.                             End If
  150.  
  151.                      fCreateProgGroup = True
  152.               End If
  153.  
  154.        Exit Function
  155. CGError:
  156.        fCreateProgGroup = False
  157. End Function
  158.  
  159.  
  160. Private Function fCreateShellGroup(ByVal strFolderName As String) As Boolean
  161.  
  162.        ReplaceDoubleQuotes strFolderName
  163.  
  164.               If strFolderName = "" Then
  165.                      Exit Function
  166.               End If
  167.  
  168.        Dim fSuccess As Boolean
  169.        fSuccess = OSfCreateShellGroup(strFolderName)
  170.  
  171.               If fSuccess Then
  172.               Else
  173.                      MsgBox "Create Start Menu Group Failed!", vbExclamation, "Ouch!"
  174.               End If
  175.  
  176.        fCreateShellGroup = fSuccess
  177. End Function
  178.  
  179.  
  180. Private Function fValid95Filename(strFilename As String) As Boolean
  181.  
  182.        Dim iInvalidChar As Integer
  183.        Dim iFilename As Integer
  184.  
  185.               If Not ValidateFilenameLength(strFilename) Then
  186.                      fValid95Filename = False
  187.                      Exit Function
  188.               End If
  189.  
  190.               For iInvalidChar = 1 To Len(kInvalid95GroupNameChars)
  191.  
  192.                             If InStr(strFilename, Mid$(kInvalid95GroupNameChars, iInvalidChar, 1)) <> 0 Then
  193.                                    fValid95Filename = False
  194.                                    Exit Function
  195.